package com.ccc.scala.base5_function

object Function1_def {
  def main(args: Array[String]): Unit = {
    // 函数
    // 基本语法：
    /*
    [修饰符] def 函数名 ( 参数列表 ) [:返回值类型] = {
      函数体
    }
     */

    // 无参，无返回值
    def fun1(): Unit = {
      println("CJ")
    }
    // 调用
    fun1() // CJ
    // 如果函数声明时，没有参数，那么调用时，可以省略小括号
    fun1 // CJ

    // 无参 有返回值
    def fun2(): String = {
      return "JC"
    }

    // 调用
    val str1 = fun2()
    val str2 = fun2
    println(str1) // JC
    println(str2) // JC

    // 有参 无返回值
    def fun3(name: String): Unit = {
      println(name)
    }
    // 调用
    fun3("CB") // CB
    // 不同于方法，函数的参数只有一个，也不能省略小括号
    // fun3 "CB" // ERROR

    // 有参 有返回值
    def fun4(name: String): String = {
      return s"name: ${name}"
    }

    // 调用
    val str3 = fun4("CCC")
    println(str3) // name: CCC


    // 多参 无返回值
    def fun5(name: String, age: Int): Unit = {
      println(s"name: ${name}, age: ${age}")
    }
    // 调用
    fun5("JJJ", 24) // name: JJJ, age: 24

    // 多参 有返回值
    def fun6(name: String, age: Int): String = {
      return s"name: ${name}, age: ${age}"
    }
    // 调用
    val str4 = fun6("QQQ", 23)
    println(str4) // name: QQQ, age: 23

  }

}
